package main

import (
	"fmt"
)

func assertString(i interface{}) {
	t2, ok := i.(string)
	if ok {
		fmt.Println("i变量是string类型")
		fmt.Println(t2)
	} else {
		fmt.Println("i变量不是是string类型")
	}
}

func assertInt(i interface{}) {
	t1 := i.(int)
	fmt.Println(t1)
}

type G interface { //自己定义的类型

}

// 假设断言的类型同时实现了switch断言的多个case，取第一个case
func test22(f interface{}) {
	switch f.(type) {
	case int:
		fmt.Println("int类型")
	case string:
		fmt.Println("string 类型")
	case G:
		fmt.Println("G类型") //空接口 的判断应该放最后一个  与上面说的对应
	case nil:
		fmt.Println("nil类型")
	default:
		fmt.Println("未知类型")
	}
}

func main() {

	var g G
	test22(g) //定义了接口但是没有赋值   就是nil
	test22("ss")
	test22(22)
	test22(true)

	assertInt(2)

	assertString("aaaa")
	assertString(22)
}
